package com.wellgoon.study.utils;

import com.google.gson.*;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * 基于Gson类实现的Json工具类
 *
 * @Author: Rocky
 * @Date: 2023/5/9
 */
public class JsonUtil {

    private static final Gson GSON = new GsonBuilder()
            .setPrettyPrinting()
            .create();

    /**
     * 将对象转换成json串
     *
     * @param obj 对象
     * @return String
     */
    public static String toJson(Object obj) {
        return GSON.toJson(obj);
    }

    /**
     * json串转为对象
     *
     * @param json  json串
     * @param clazz 对象类
     * @param <T>   泛型类型
     * @return 对象
     */
    public static <T> T toObject(String json, Class<T> clazz) {
        return GSON.fromJson(json, clazz);
    }

    /**
     * json串转为对象
     *
     * @param json      json串
     * @param typeOfObj 对象类型
     * @param <T>       泛型类型
     * @return 对象
     */
    public static <T> T toObject(String json, Type typeOfObj) {
        return GSON.fromJson(json, typeOfObj);
    }

    /**
     * json串转为集合对象
     *
     * @param json  json串
     * @param clazz 类型
     * @param <T>   泛型类型
     * @return 集合对象
     */
    public static <T> List<T> toList(String json, Class<T> clazz) {
        JsonElement jsonElement = JsonParser.parseString(json);
        JsonArray jsonArray = jsonElement.getAsJsonArray();
        List<T> list = new ArrayList<>(jsonArray.size());
        for (JsonElement obj : jsonArray) {
            T t = GSON.fromJson(obj, clazz);
            list.add(t);
        }
        return list;
    }
}

